/**
 ******************************************************************************
 * @文件名称 : disp_init.c
 * @摘要 :
 * @创建日期 : Jul 31, 2024
 * @创建者：MBL
 ******************************************************************************
 * @使用说明
 *
 *
 ******************************************************************************
 */

/* 声明包含头文件 -----------------------------------------------------------*/
#include "../Inc/disp_init.h"
#include "../Inc/data_public.h"
/* 声明私有类型定义---------------------------------------------------------*/

/* 声明私有变量 -------------------------------------------------------------*/
static lv_obj_t* loadingBar;  //进度条
static lv_obj_t* loadingBtn;  //加载值输入按钮
static lv_obj_t* loadingLable;  //加载值标签
static uint8_t progressDelay;  //进度延时
/* 声明私有常量 -------------------------------------------------------------*/

/* 声明私有宏定义 -----------------------------------------------------------*/

/* 声明私有函数 -------------------------------------------------------------*/

/**
* @brief 初始化界面按钮回调
* @param *e ：事件相关参数的集合，它包含了该事件的所有数据
* @return 无
*/
static void UI_init_btn_event_cb(lv_event_t* e)
{
	static kb_userData_t  userData;
	userData.value = &UP.gLoading;
	userData.store_enable = 1;
    lv_obj_t* target = lv_event_get_target(e); /* 获取触发源 */
    if (target == loadingBtn)  //加载值输入按钮
    {
    	UP.gLoading = 99;
    	keyboard_create_int(0, 100, &userData);//通过键盘设置加载值
    }
}

/**
  * @brief  显示界面定时器回调
  * @param  无
  * @retval 无
  */
void UI_init_timer_event_cb(lv_timer_t* timer)
{
	UI_circulate_script_init();  //初始化界面循环脚本
	UI_display_init();  //初始化界面显示
}

/**
  * @brief  初始化界面创建
  * @param  无
  * @retval 无
  */
void UI_create_init(void)
{
	lv_obj_t* label = NULL;  //显示标签

    parentObj = lv_img_create(lv_scr_act());
    lv_img_set_src(parentObj, &dsc_img_buff[0]);
//    parentObj = lv_obj_create(lv_scr_act());  //创建父对象
    lv_obj_add_style(parentObj, &style_parentObj, LV_STATE_DEFAULT);  //添加父对象为无填充样式
    lv_obj_set_size(parentObj, lv_pct(100), lv_pct(100));  //设置父对象的大小
    lv_obj_set_style_bg_color(parentObj, lv_palette_main(LV_PALETTE_GREEN), LV_STATE_DEFAULT);  //颜色
    lv_obj_align(parentObj, LV_ALIGN_TOP_LEFT, 0, 0);  //设置父对象的位置

    /* 定时器 */
	UI_display_timer = lv_timer_create(UI_init_timer_event_cb, 100, NULL);  //100mS触发一次

    /* 进度条 */
    loadingBar = lv_bar_create(parentObj);  //创建进度条
    lv_obj_set_style_bg_color(loadingBar, lv_color_hex(0x3b4048), LV_STATE_DEFAULT);  //颜色
//    lv_obj_set_style_bg_color(loadingBar, lv_palette_main(LV_PALETTE_BLUE), LV_STATE_DEFAULT);  //颜色
//    lv_obj_set_style_outline_color(loadingBar, lv_palette_main(LV_PALETTE_GREY), LV_STATE_DEFAULT);  //边框颜色
    lv_obj_set_style_outline_width(loadingBar, 0, LV_STATE_DEFAULT);  //边框宽度
    lv_obj_set_size(loadingBar, lv_pct(24), lv_pct(7));  //大小
    lv_obj_set_style_pad_top(loadingBar, 0, LV_STATE_DEFAULT);
    lv_obj_set_style_pad_bottom(loadingBar, 0, LV_STATE_DEFAULT);
    lv_obj_set_style_pad_left(loadingBar, 0, LV_STATE_DEFAULT);
    lv_obj_set_style_pad_right(loadingBar, 0, LV_STATE_DEFAULT);
    lv_obj_align(loadingBar, LV_ALIGN_TOP_MID, lv_pct(-3), lv_pct(78));  //位置
    lv_bar_set_range(loadingBar, 0, 100);  //进度范围

    label = lv_label_create(loadingBar);  //创建消息按钮标签
    lv_obj_set_style_text_color(label, lv_color_hex(0xffffff), LV_STATE_DEFAULT);
    lv_label_set_text_fmt(label, "Version%01d.%01d.%01d", 1,0,0);  //更新时钟显示
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);  //位置



    /* 加载值输入按钮 */
    loadingBtn = lv_btn_create(parentObj);  //创建消息界面切换按钮
    lv_obj_set_style_bg_opa(loadingBtn, LV_OPA_0, LV_STATE_DEFAULT);  //设置背景透明度
    lv_obj_set_style_shadow_opa(loadingBtn, LV_OPA_0, LV_STATE_DEFAULT);  //设置阴影透明度
    lv_obj_align_to(loadingBtn, parentObj, LV_ALIGN_TOP_LEFT, lv_pct(88), lv_pct(76));  //位置
    lv_obj_add_event_cb(loadingBtn, UI_init_btn_event_cb, LV_EVENT_CLICKED, NULL);  //事件
    /* 加载值显示标签 */
    loadingLable = lv_label_create(loadingBtn);  //创建消息按钮标签
    lv_obj_set_style_text_font(loadingLable, &lv_font_montserrat_20, LV_STATE_DEFAULT);  //自带字体
    lv_label_set_text_fmt(loadingLable, "%d%%", loadingValue);  //更新进度值
    lv_obj_align_to(loadingLable, loadingBtn, LV_ALIGN_CENTER, 0, 0);  //位置
}

/**
  * @brief  初始化界面显示
  * @param  无
  * @retval 无
  */
void UI_display_init(void)
{
    lv_label_set_text_fmt(loadingLable, "%d%%", loadingValue);  //更新进度值
    lv_bar_set_value(loadingBar, loadingValue, LV_ANIM_ON);  //更新进度条
}

/**
  * @brief  初始化界面删除
  * @param  无
  * @retval 无
  */
void UI_delete_init(void)
{
    lv_obj_del(parentObj);  //删除当前界面
    parentObj = NULL;
	lv_timer_del(UI_display_timer);  //删除定时器
}

/**
  * @brief  初始化界面循环脚本
  * @param  无
  * @retval 无
  */
void UI_circulate_script_init(void)
{
    if (loadingValue < 99)  //自动更新进度值
    {
        loadingValue = loadingValue + 3;
    }
    else if(loadingValue == 99)
    {
    	if(UP.gLoading < 99)
    	{
    		UP.gLoading = loadingValue;
        	send_aux(&UP.gLoading);
    	}
    	else if(UP.gLoading == 100)
    	{
    		loadingValue = UP.gLoading;
    	}
    }
    if(loadingValue == 100)
    {
        if (++progressDelay > 10)  //延时1S
        {
        	disp.New = DIF_MAIN;  //进入主界面
        }
    }
}
